var waitTransFlag = false;
var createInterval = false;

$("#codeModalClose").click(function () {
    /*
    $("#sending").css("display", "none");
    $("#reception").css("display", "none");

    $("#sendBefore").css("display", "block");
     */
});

/*
notyf.confirm('开始上传');
notyf.alert('操作失败');
*/
var notyf = new Notyf({delay:3000});
/*
var num = '123456';
notyf.confirm('上传成功，文件码为：' + num);
*/
var fileBtn = $("input[name=file]");
var processBar = $("#progressBar");
var uploadBtn = $("#upload");
var cancelUploadBtn = $("#cancelUpload");

var ot;//上传开始时间
var oloaded;//已上传文件大小
var xhr; // XMLHttpRequest

var fileName; // 文件名
var fileType; // 文件类型
var fileSize; // 文件大小

var filePass; // 文件密码
var fileTimes; // 文件下载次数

fileBtn.change(function () {
    var fileObj = fileBtn.get(0).files[0]; //js获取文件对象
    if (fileObj) {
        fileName = fileObj.name;
        fileType = fileObj.type;
        fileSize = getSize(fileObj.size);

        $(".file_name").val(fileName);
        $(".file_type").val(fileType);
        $(".file_size").val(fileSize);
    }
});

uploadBtn.click(function () {
    // 进度条归零
    setProgress(0);

    // console.log($("#file_pass").val())
    // console.log($("#file_times").val())

    filePass = $("#file_pass").val();
    fileTimes = $("#file_times").val();

    var fileObj = fileBtn.get(0).files[0]; //js获取文件对象
    var flag = checkSize(fileObj.size);
    if (!flag) {
        document.getElementById("infoModalClose").click();
        setTimeout(function () {
            notyf.alert('拒绝上传，文件超过额定大小2GB。');
        }, 1000);

        return;
    }
    // 上传文件
    uploadFile();

    document.getElementById("infoModalClose").click();

    $("#sendBefore").css("display", "none");
    $("#reception").css("display", "none");

    $("#sending").css("display", "block");
});

cancelUploadBtn.click(function () {

    document.getElementById("infoModalClose").click();

    /*
    if (typeof xhr != "undefined") {
        cancelUpload();
    }
    */

});

function uploadFile() {
    var url = "/api/user/upload";
    var fileObj = fileBtn.get(0).files[0];

    // FormData 对象
    var form = new FormData();
    form.append('file', fileObj); // 文件对象
    form.append('fileName', fileName); // 文件名称
    form.append('fileType', fileType); // 文件类型
    form.append('fileSize', fileSize); // 文件大小

    form.append('filePass', filePass); // 文件密码
    form.append('fileTimes', fileTimes); // 过期次数

    // 建立XMLHttpRequest了。
    xhr = new XMLHttpRequest();

    //true为异步处理
    xhr.open('post', url, true);

    //上传开始执行方法
    xhr.onloadstart = function () {
        // console.log('开始上传')
        ot = new Date().getTime();   //设置上传开始时间
        oloaded = 0;//已上传的文件大小为0
    };

    xhr.upload.addEventListener('progress', progressFunction, false);
    xhr.addEventListener("load", uploadComplete, false);
    xhr.addEventListener("error", uploadFailed, false);
    xhr.addEventListener("abort", uploadCanceled, false);
    xhr.send(form);

    function progressFunction(evt) {
        // debugger;
        if (evt.lengthComputable) {
            var completePercent = Math.round(evt.loaded / evt.total * 100);
            setProgress(completePercent);

            var time = $("#time");
            var nt = new Date().getTime();     //获取当前时间
            var pertime = (nt - ot) / 1000;        //计算出上次调用该方法时到现在的时间差，单位为s
            ot = new Date().getTime();          //重新赋值时间，用于下次计算

            var perload = evt.loaded - oloaded; //计算该分段上传的文件大小，单位b
            oloaded = evt.loaded;               //重新赋值已上传文件大小

            //上传速度计算
            var speed = perload / pertime;//单位b/s
            var bspeed = speed;
            var units = 'b/s';//单位名称
            if (speed / 1024 > 1) {
                speed = speed / 1024;
                units = 'k/s';
            }
            if (speed / 1024 > 1) {
                speed = speed / 1024;
                units = 'M/s';
            }
            speed = speed.toFixed(1);
            //剩余时间
            var resttime = ((evt.total - evt.loaded) / bspeed).toFixed(1);
            if (resttime > 60 * 60) {
                var hour = parseInt(resttime / (60 * 60));
                var min = parseInt(resttime % (60 * 60) / 60);
                var second = parseInt(resttime % 60);

                $("#showInfo").html(speed + units + '<br><br>' + hour + 'h&ensp;' + min + 'min&ensp;' + second + 's');
            } else if (resttime > 60) {
                var min = parseInt(resttime % (60 * 60) / 60);
                var second = parseInt(resttime % 60);
                if (waitTransFlag == false)
                    $("#showInfo").html(speed + units + '<br><br>'+ min + 'min&ensp;' + second + 's');
            } else {
                if (waitTransFlag == false)
                    $("#showInfo").html(speed + units + '<br><br>' + resttime + 's');
            }
        }
    }

    //上传成功后回调
    function uploadComplete(evt) {
        $("#file_times").val(10);
        $("#file_pass").val('');

        var res = evt.target.responseText;
        var json = JSON.parse(res);

        clearWaitTransInterval();

        if (json.code == 0) {
            processBar.attr('aria-valuenow', 100);
            setTimeout(function () {
                notyf.confirm('upload finish.');
            }, 1000);


            $("#file_code").text(json.data.fileCode);

            setTimeout(function () {
                document.getElementById("codeModalLink").click();
            }, 2000);

            /*setTimeout(function () {
                // notyf.confirm('上传成功，文件码为：' + json.data.fileCode);
            }, 3000);*/

            setTimeout(function () {
                $("#showInfo").html('0k/s' + '<br><br>' + '0s');
            }, 2000);
        } else {
            notyf.alert(json.msg);
        }
    }

    //上传失败回调
    function uploadFailed(evt) {
        $("#file_times").val(10);
        $("#file_pass").val('');

        waitTransFlag = false;
        clearInterval(waitTransInterval);

        notyf.alert('upload exception.');

        // 登录判断逻辑后面需要再说。

        setTimeout(function () {
            setProgress(0);
        },2000);
    }

    //上传取消后回调
    function uploadCanceled(evt) {
        $("#file_times").val(10);
        $("#file_pass").val('');

        clearWaitTransInterval();

        notyf.alert('上传取消' + evt.target.responseText);
        console.log('上传取消,上传被用户取消或者浏览器断开连接:' + evt.target.responseText);
    }
}


// 设置进度条
function setProgress(w) {
    if (w == 100 && createInterval == false) {

        processBar.attr('aria-valuenow', 99);
        $("#showInfo").html('<span style="font-family: cursive; font-size: 21px;" id="trans-wait">正在转存，请稍等' + '<br><br>' + '&nbsp;</span>');

        waitInterval();
        waitTransFlag = true;
        createInterval = true;
    } else {
        processBar.attr('aria-valuenow', w);
    }
}

function waitInterval() {
    var transWaitNum = 0;
    setInterval(function () {
        // console.log("interval");

        var transVal = $("#trans-wait").html();

        if (7 == transWaitNum) {
            transVal = transVal.substr(0, transVal.length - 7);
            $("#trans-wait").html(transVal);

            transWaitNum = 0;
        } else {
            if (transWaitNum == 3) {
                transVal += " ";
            } else {
                transVal += ".";
            }
            $("#trans-wait").html(transVal);

            transWaitNum++;
        }
    }, 900);
}

function clearWaitTransInterval() {
    waitTransFlag = false;
    for (var i=1; i<100; i++) {
        window.clearInterval(i);
    }
    createInterval = false;
}

// 获取Size
function getSize(size) {
    var fileSize = '0KB';
    if (size > 1024 * 1024 * 1024) {
        fileSize = ((size / (1024 * 1024 * 1024))).toFixed(2).toString() + 'GB';
    } else if (size > 1024 * 1024) {
        fileSize = (Math.round(size / (1024 * 1024))).toString() + 'MB';
    } else {
        fileSize = (Math.round(size / 1024)).toString() + 'KB';
    }
    return fileSize;
}

function checkSize(size) {
    if (size > 1024 * 1024 * 1024 * 2) {
        return false;
    }

    return true;
}

//终止上传
function cancelUpload() {
    xhr.abort();
}






